package com.itheima.manage_system;

import com.itheima.manage_system.domain.Person;

import java.util.ArrayList;
import java.util.Scanner;

public class Operate {
    private Scanner sc = new Scanner(System.in);


    //编号所在元素在集合中的索引(不存在则返回-1)
    public int getIndex(ArrayList<Person> list, String id) {
            /*
            编号唯一性的判断方法
            遍历list,用id逐个匹配list中每个元素的id,如果匹配到就返回索引
            如果没有匹配到,最后返回-1
             */
        for (int i = 0; i < list.size(); i++) {
            if (id.equals(list.get(i).getId())) {
                return i;
            }
        }
        return -1;
    }

    //增
    public void addPerson(ArrayList<Person> list) {
        /*
           录入id,然后对id在list中的唯一性判断并返回index
           index不是-1,说明id已存在,重新录入
           否则id是不重复的,继续录入其他信息,并封装到addPerson对象,将对象添加到集合
         */
        while (true) {
            System.out.println("请输入要添加的编号:");
            String addId = sc.next();
            int index = getIndex(list, addId);
            if (index != -1) {
                System.out.println("编号" + addId + "已存在!");
            } else {
                System.out.println("请输入添加的名字:");
                String addName = sc.next();
                System.out.println("请输入添加的年龄:");
                int addAge = sc.nextInt();
                System.out.println("请输入添加的住址:");
                String addAdress = sc.next();
                Person addPerson = new Person(addId, addName, addAge, addAdress);
                list.add(addPerson);
                System.out.println("添加成功");
                break;
            }
        }


    }

    //删
    public void removePerson(ArrayList<Person> list) {
        /*
        输入一个要要删除的removeId   如果removeId不在list中,则无法删除;
        否则就删除这个元素
         */
        if(list.isEmpty()){
            System.out.println("暂无可供删除的信息!");
            return;
        }
        System.out.println("请输入要删除的编号:");
        String removeId = sc.next();
        int index = getIndex(list, removeId);
        if (index == -1) {
            System.out.println("编号" + removeId + "不存在!");
        } else {
            list.remove(index);
            System.out.println("删除成功");
        }

    }

    //改
    public void updatePerson(ArrayList<Person> list) {
        /*
        输入一个id ,判断id是否在list中    如果不在,则无法修改;否则继续录如其他信息
        将录入的信息存入 updatePerson对象中,将对象添加到list

         */
        if(list.isEmpty()){
            System.out.println("暂无可供修改的信息!");
            return;
        }
        System.out.println("请输入要修改的编号:");
        String updateId = sc.next();
        int index = getIndex(list, updateId);
        if (index == -1) {
            System.out.println("编号" + updateId + "不存在!");

        } else {
            System.out.println("请输入修改的名字:");
            String updateName = sc.next();
            System.out.println("请输入修改的年龄:");
            int updateAge = sc.nextInt();
            System.out.println("请输入修改的住址:");
            String updateAdress = sc.next();

            Person updatePerson = list.get(index);
            updatePerson.setName(updateName);
            updatePerson.setAge(updateAge);
            updatePerson.setAdress(updateAdress);

            System.out.println("修改成功");

        }


    }

    //查所有人信息
    public void allPerson(ArrayList<Person> list) {
        /*
        对集合非空判断,如果集合为空,则没有信息
        否则遍历集合,打印每个元素的各个信息
         */
        if (list.isEmpty()) {
            System.out.println("暂无可供查询的信息!");
        } else {
            System.out.println("编号\t\t姓名\t\t年龄\t\t住址");
            for (Person p : list) {
                System.out.println(p.getId() + "\t\t" + p.getName() + "\t\t" + p.getAge() + "\t\t" + p.getAdress());
            }
        }

    }

    //通过名字查询信息
    public void sameName(ArrayList<Person> list) {
        /*
        通过名字queryName查询
        遍历list,用录入的名字匹配list中各元素的name;
        如果匹配到就将该元素添加到新的集合sameNameList;

        遍历完成后,会有一个新的集合
        如果新集合是空的,说明没有查到queryName的人
        否则把新集合sameNameList遍历打印各元素的信息
         */
        if(list.isEmpty()){
            System.out.println("暂无可供查询的信息!");
            return;
        }
        System.out.println("请输入要查询的名字:");
        String queryName = sc.next();
        ArrayList<Person> sameNameList = new ArrayList<>();
        for (Person person : list) {
            if (queryName.equals(person.getName())) {
                sameNameList.add(person);
            }
        }
        if (sameNameList.isEmpty()) {     //新集合为空则信息查不到
            System.out.println("查询不到" + queryName + "的信息!");
        } else {                       //否则打印新集合中的信息
            System.out.println("编号\t\t姓名\t\t年龄\t\t住址");
            for (Person p : sameNameList) {
                System.out.println(p.getId() + "\t\t" + p.getName() + "\t\t" + p.getAge() + "\t\t" + p.getAdress());
            }
        }
    }


}
